
[dbo].[asi_HierarchyGetAdjacentSortOut]
CREATE PROCEDURE [dbo].[asi_HierarchyGetAdjacentSortOut] @adjacentHierarchyKey uniqueidentifier, @addType smallint = 3, @NewSort int OUTPUT AS
DECLARE
@LowSort int, @HighSort int, @SortOrder int, @RootHierarchyKey uniqueidentifier, @Run bit
BEGIN
SET @Run = 1
WHILE @Run = 1
BEGIN
IF @addType = 0
BEGIN
SELECT @RootHierarchyKey = a.RootHierarchyKey, @HighSort = a.SortOrder, @LowSort = ISNULL(Max(b.SortOrder),0)
FROM Hierarchy a LEFT OUTER JOIN Hierarchy b
ON a.RootHierarchyKey = b.RootHierarchyKey
AND a.SortOrder > b.SortOrder
WHERE a.HierarchyKey = @adjacentHierarchyKey
GROUP BY a.SortOrder, a.RootHierarchyKey
END
ELSE IF @addType = 1 OR @addType = 3
BEGIN
SELECT @RootHierarchyKey = a.RootHierarchyKey, @HighSort = Min(b.SortOrder)
FROM Hierarchy a LEFT OUTER JOIN Hierarchy b
ON a.RootHierarchyKey = b.RootHierarchyKey
AND a.SortOrder < b.SortOrder
AND a.Depth >= b.Depth
WHERE a.HierarchyKey = @adjacentHierarchyKey
GROUP BY a.RootHierarchyKey
IF @HighSort IS NOT NULL
BEGIN
SELECT @LowSort = Max(a.SortOrder)
FROM Hierarchy a
WHERE a.RootHierarchyKey = @RootHierarchyKey
AND a.SortOrder < @HighSort
END
ELSE
BEGIN
SELECT @LowSort = Max(a.SortOrder)
FROM Hierarchy a
WHERE a.RootHierarchyKey = @RootHierarchyKey
SET @HighSort = @LowSort + 4096
END
END
ELSE IF @addType = 2
BEGIN
SELECT @RootHierarchyKey = a.RootHierarchyKey, @LowSort = a.SortOrder, @HighSort = ISNULL(Min(b.SortOrder), a.SortOrder + 4096)
FROM Hierarchy a LEFT OUTER JOIN Hierarchy b
ON a.RootHierarchyKey = b.RootHierarchyKey
AND a.SortOrder < b.SortOrder
WHERE a.HierarchyKey = @adjacentHierarchyKey
GROUP BY a.SortOrder, a.RootHierarchyKey
END
ELSE IF @addType = 4
BEGIN
SELECT @RootHierarchyKey = a.RootHierarchyKey, @LowSort = a.SortOrder, @HighSort = a.SortOrder
FROM Hierarchy a
WHERE a.HierarchyKey = @adjacentHierarchyKey
END
IF @HighSort - @LowSort < 2 AND @addType != 4
EXEC asi_HierarchyResort2 @RootHierarchyKey
ELSE
SET @Run = 0
END
SET @NewSort = ISNULL(((@HighSort - @LowSort) / 2) + @LowSort, 0)
END
GO